home *** CD-ROM | disk | FTP | other *** search
/ CICA 1995 September (Japanese) / CICA Shareware for Windows CD-ROM (Walnut Creek) (September 1995) (Japanese) (Disc 2).iso / disc2 / nt / ntperf.exe / PERFTOOLS / SRC / PERFMON / INIT.C_ / INIT.C
Encoding:
C/C++ Source or Header  |  1993-05-15  |  14.5 KB  |  463 lines

  1. //==========================================================================//
  2. //                                  Includes                                //
  3. //==========================================================================//
  4. #include <string.h>     // strupr
  5. #include <stdio.h>      // for sprintf.
  6. #include <locale.h>     // TESTING TESTING
  7.  
  8.  
  9. #include "perfmon.h"
  10. #include "init.h"       // external declarations for this file
  11.  
  12. #include "alert.h"      // for AlertIitializeApplication
  13. #include "command.h"    // for ViewChart
  14. #include "grafdata.h"   // for QuerySaveChart
  15. #include "graph.h"      // for GraphInitializeApplication
  16. #include "legend.h"     // for LegendInitializeApplication
  17. #include "log.h"        // for LogInitializeApplication
  18. #include "intrline.h"   // for ILineInitializeApplication
  19. #include "perfdata.h"   // for PerfDataInitializeInstance
  20. #include "perfmops.h"   // for OpenFileHandler, for now
  21. #include "status.h"     // for StatusInitializeApplication
  22. #include "timeline.h"   // for TLineInitializeApplication
  23. #include "playback.h"   // for PlaybackInitializeInstance
  24. #include "registry.h"   // for Load/SaveMainWindowPlacement
  25. #include "report.h"     // for ReportInitializeApplication
  26. #include "toolbar.h"    // for ToolbarInitializeApplication
  27. #include "utils.h"
  28. #include "fileopen.h"   // for FileOpen
  29. #include "pmemory.h"    // for MemoryFree
  30.  
  31. extern   TCHAR          DefaultLangId[] ;
  32. extern   TCHAR          EnglishLangId[] ;
  33.  
  34. //==========================================================================//
  35. //                                  Constants                               //
  36. //==========================================================================//
  37.  
  38.  
  39. #define szPerfmonMainClass TEXT("PerfmonMainClass")
  40.  
  41. HHOOK   lpMsgFilterProc ;
  42. DWORD FAR PASCAL MessageFilterProc (int nCode, WPARAM wParam,
  43.       LPARAM lParam) ;
  44.  
  45.  
  46. //==========================================================================//
  47. //                              Local Functions                             //
  48. //==========================================================================//
  49.  
  50.  
  51. void GetScalesFonts (void)
  52.    {
  53.    LOGFONT        lf ;
  54.  
  55.    memset (&lf, 0, sizeof (lf)) ;
  56.  
  57.    lstrcpy (lf.lfFaceName, szScalesFontFace) ;
  58.    lf.lfHeight = iScalesFontHeight ;
  59.    lf.lfWeight = FW_REGULAR ;
  60.  
  61.    hFontScales = CreateFontIndirect (&lf) ;
  62.  
  63.    lf.lfWeight = FW_BOLD ;
  64.    hFontScalesBold = CreateFontIndirect (&lf) ;
  65.    }
  66.  
  67.  
  68. BOOL InitializeSystemValues (void)
  69. /*
  70.    Effect:        Read and store in variables the various system values,
  71.                   such as the width and height of the screen and icons,
  72.                   the width of scroll bars, etc.
  73.  
  74.    Called By:     PerfmonInitialize only.
  75.  
  76.    Returns:       Whether this function was successful in getting all
  77.                   needed system values.
  78. */
  79.    {  // InitializeSystemValues
  80.    xScreenWidth =  GetSystemMetrics (SM_CXSCREEN) ;
  81.    yScreenHeight = GetSystemMetrics (SM_CYSCREEN) ;
  82.  
  83.    xBorderWidth = GetSystemMetrics (SM_CXBORDER) ;
  84.    yBorderHeight = GetSystemMetrics (SM_CYBORDER) ;
  85.  
  86.    xScrollWidth = GetSystemMetrics (SM_CXVSCROLL) ;
  87.    yScrollHeight = GetSystemMetrics (SM_CYHSCROLL) ;
  88.  
  89.    xScrollThumbWidth = GetSystemMetrics (SM_CXHTHUMB) ;
  90.    yScrollThumbHeight = GetSystemMetrics (SM_CYVTHUMB) ;
  91.  
  92.    xDlgBorderWidth = GetSystemMetrics (SM_CXDLGFRAME) ;
  93.    yDlgBorderHeight = GetSystemMetrics (SM_CYDLGFRAME) ;
  94.  
  95.    MinimumSize = yScrollHeight +
  96.                  GetSystemMetrics (SM_CYMENU) +
  97.                  GetSystemMetrics (SM_CYCAPTION) ;
  98.  
  99.    //================================================================//
  100.    // create all the brushes and pens for performance improvement    //
  101.    //================================================================//
  102.    CreatePerfmonSystemObjects () ;
  103.    hWhitePen = CreatePen (PS_SOLID, 3, crWhite) ;
  104.  
  105.  
  106. // TESTING TESTING TESTING
  107. #if 0
  108.    {
  109.    DWORD GDIBatchLimit = GdiSetBatchLimit (1) ;
  110.    }
  111. //mike1(TEXT("SetLocale returns %s"), setlocale(LC_NUMERIC, NULL));
  112. mike1(TEXT("SetLocale returns %s"), setlocale(LC_NUMERIC, NULL));
  113. #endif
  114.  
  115.  
  116.    return (TRUE) ;
  117.    }  // InitializeSystemValues
  118.  
  119.  
  120. BOOL InitializeApplication (void)
  121. /*
  122.    Effect:        Perform all initializations required for the FIRST
  123.                   instance of the Perfmon application. In particular,
  124.                   register all of Perfmon's window classes.
  125.  
  126.    Note:          There is no background brush set for the MainWindow
  127.                   class so that the main window is never erased. The
  128.                   client area of MainWindow is always covered by one
  129.                   of the view windows. If we erase it, it would just
  130.                   flicker needlessly.
  131.  
  132.    Called By:     PerfmonInitialize only.
  133.  
  134.    Returns:       Whether this function was successful in initializing.
  135. */
  136.    {  // InitializeApplication
  137.    BOOL           bSuccess ;
  138.    WNDCLASS       wc ;
  139.    TCHAR          LocalHelpFileName [ShortTextLen] ;
  140.    LPTSTR         pFileName ;
  141.  
  142.    hIcon = LoadIcon (hInstance, idIcon) ;
  143.  
  144.    //=============================//
  145.    // Register Main window class  //
  146.    //=============================//
  147.  
  148.    wc.style         = CS_DBLCLKS | CS_BYTEALIGNCLIENT;
  149.    wc.lpfnWndProc   = (WNDPROC) MainWndProc;
  150.    wc.hInstance     = hInstance;
  151.    wc.cbClsExtra    = 0 ;
  152.    wc.cbWndExtra    = 0;
  153.    wc.hIcon         = hIcon ;
  154.    wc.hCursor       = LoadCursor(NULL, IDI_APPLICATION);
  155.    wc.hbrBackground = NULL ;                             // see note above
  156.    wc.lpszMenuName  = idMenuChart ;
  157.    wc.lpszClassName = szPerfmonMainClass ;
  158.  
  159.    bSuccess = RegisterClass (&wc) ;
  160.  
  161.    //=============================//
  162.    // Register Abstract "Systems" //
  163.    //=============================//
  164.    hbLightGray = GetStockObject (LTGRAY_BRUSH) ;
  165.  
  166.    if (bSuccess)
  167.       bSuccess = StatusInitializeApplication () ;
  168.  
  169.    if (bSuccess)
  170.       bSuccess = GraphInitializeApplication () ;
  171.  
  172. #ifdef ADVANCED_PERFMON
  173.    if (bSuccess)
  174.       bSuccess = LogInitializeApplication () ;
  175.  
  176.    if (bSuccess)
  177.       bSuccess = AlertInitializeApplication () ;
  178.  
  179.    if (bSuccess)
  180.       bSuccess = ReportInitializeApplication () ;
  181.  
  182.    if (bSuccess)
  183.       bSuccess = ILineInitializeApplication () ;
  184.  
  185.    if (bSuccess)
  186.       bSuccess = TLineInitializeApplication () ;
  187. #endif
  188.  
  189.    // setup messagehook to handle F1 as help
  190.    lpMsgFilterProc = SetWindowsHookEx (WH_MSGFILTER,
  191.           (HOOKPROC) MessageFilterProc,
  192.           hInstance,
  193.           GetCurrentThreadId()) ;
  194.  
  195.    // get the help file full path name
  196.    LoadString (hInstance, IDS_HELPFILE_NAME,
  197.       (LPTSTR)LocalHelpFileName, ShortTextLen-1);
  198.  
  199.  
  200.    if (LocalHelpFileName[0])
  201.       {
  202.       pszHelpFile = (LPTSTR) MemoryAllocate (FilePathLen * sizeof (TCHAR)) ;
  203.       SearchPath (NULL, LocalHelpFileName, NULL,
  204.             FilePathLen - 1, pszHelpFile, &pFileName) ;
  205.       }
  206.    else
  207.       {
  208.       // no help file
  209.       pszHelpFile = (LPTSTR) MemoryAllocate (sizeof (TCHAR)) ;
  210.       *pszHelpFile = TEXT('\0') ;
  211.       }
  212.  
  213.    return (bSuccess) ;
  214.    }  // InitializeApplication
  215.  
  216.  
  217.  
  218. BOOL InitializeInstance (int nCmdShow, LPCSTR lpszCmdLine)
  219. /*
  220.    Effect:        Perform all initializations required for EACH instance
  221.                   of the Perfmon application. In particular, create all
  222.                   of Perfmon's initial windows, and perform any other
  223.                   initializations except registering classes (done in
  224.                   InitializeApplication).
  225.  
  226.    Called By:     PerfmonInitialize only.
  227.  
  228.    Note:          This function has multiple return points.
  229.  
  230.    Returns:       Whether this function was successful in initalizing.
  231. */
  232.    {  // InitializeInstance
  233.    DWORD          ComputerNameLength;
  234.    TCHAR          szApplication [WindowCaptionLen] ;
  235.  
  236.  
  237.    //=============================//
  238.    // Set Priority high           //
  239.    //=============================//
  240.  
  241.    SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS) ;
  242.    SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST) ;
  243.  
  244.    //=============================//
  245.    // Load Resources              //
  246.    //=============================//
  247.  
  248.    GetScalesFonts () ;
  249.  
  250.    hMenuChart = LoadMenu (hInstance, idMenuChart) ;
  251.  
  252. #ifdef ADVANCED_PERFMON
  253.    hMenuAlert = LoadMenu (hInstance, idMenuAlert) ;
  254.    hMenuLog = LoadMenu (hInstance, idMenuLog) ;
  255.    hMenuReport = LoadMenu (hInstance, idMenuReport) ;
  256. #endif
  257.  
  258.    hAccelerators = LoadAccelerators (hInstance, idAccelerators) ;
  259.  
  260.  
  261.    //=============================//
  262.    // Initialize Systems          //
  263.    //=============================//
  264.  
  265.    iLanguage = GetUserDefaultLangID() ;
  266.    iEnglishLanguage = MAKELANGID (LANG_ENGLISH, LANG_NEUTRAL) ;
  267. //   iEnglishLanguage = MAKELANGID (iLanguage & 0x0ff, LANG_NEUTRAL) ;
  268.    TSPRINTF (DefaultLangId, TEXT("%03x"), iLanguage) ;
  269.    TSPRINTF (EnglishLangId, TEXT("%03x"), iEnglishLanguage) ;
  270.  
  271.    // GetComputerName returns the name without the "\\" prefix. We add
  272.    // the prefix before even calling the routine. This is so that all our
  273.    // computer names have the prefix and are therefore compatible with
  274.    // I_SetSystemFocus (see perfmops.c).
  275.  
  276.    ComputerNameLength = MAX_COMPUTERNAME_LENGTH + 1;
  277.    lstrcpy (LocalComputerName, szComputerPrefix) ;
  278.    GetComputerName (LocalComputerName + lstrlen (szComputerPrefix), 
  279.                     &ComputerNameLength);
  280.  
  281.    PlaybackInitializeInstance () ;
  282.    PerfDataInitializeInstance () ;
  283.  
  284.    //=============================//
  285.    // Create Window               //
  286.    //=============================//
  287.  
  288.    StringLoad (IDS_APPNAME, szApplication) ;
  289.    hWndMain = CreateWindow (szPerfmonMainClass,
  290.                             szApplication,
  291.                                   WS_OVERLAPPEDWINDOW | WS_BORDER,
  292.                               CW_USEDEFAULT, CW_USEDEFAULT, 
  293.                               CW_USEDEFAULT, CW_USEDEFAULT, 
  294.                               NULL,
  295.                             NULL,
  296.                             NULL,
  297.                             NULL);
  298.  
  299.    if (!hWndMain)
  300.       return (FALSE) ;
  301.  
  302.    ViewChart (hWndMain) ;
  303.  
  304.    LoadMainWindowPlacement (hWndMain) ;
  305.  
  306.    return (TRUE) ;
  307.    }  // InitializeInstance
  308.  
  309.  
  310. //==========================================================================//
  311. //                             Exported Functions                           //
  312. //==========================================================================//
  313.  
  314.  
  315. BOOL PerfmonInitialize (HINSTANCE hCurrentInstance,
  316.                         HINSTANCE hPrevInstance,
  317.                         LPCSTR lpszCmdLine,
  318.                         int nCmdShow)
  319. /*
  320.    Effect:        Performa all initializations required when Perfmon is
  321.                   started. In particular, initialize all "systems", register
  322.                   all window classes, create needed windows, read in and
  323.                   process font and Perfmon lists.
  324.  
  325.    Called By:     WinMain only, at the start of the application.
  326.  
  327.    Assert:        There are no other instances of Perfmon currently
  328.                   executing.
  329.  
  330.    Returns:       Whether initialization was successful. If this function
  331.                   returns FALSE, Perfmon should exit immediately.
  332.  
  333.    Internals:     The bSuccess variable is used to conditionalize each
  334.                   successive initialization step.
  335. */
  336.    {  // PerfmonInitialize
  337.    BOOL           bSuccess ;
  338.    TCHAR          szFilePath [FilePathLen + 1] ;
  339.    LPTSTR         pFileNameStart ;
  340.    HANDLE         hFindFile ;
  341.    WIN32_FIND_DATA FindFileInfo ;
  342.    CHAR           QuoteChar ;
  343.    LPSTR          pCmdLine ;
  344.    int            NameOffset ;
  345.  
  346.  
  347.    hInstance = hCurrentInstance ;
  348.    bSuccess = InitializeSystemValues () ;
  349.  
  350.    if (bSuccess && !hPrevInstance)
  351.       bSuccess = InitializeApplication () ;
  352.  
  353.    if (bSuccess)
  354.       bSuccess = InitializeInstance (nCmdShow, lpszCmdLine) ;
  355.  
  356.    GetDateTimeFormats() ;
  357.  
  358.    if (bSuccess)
  359.       {
  360.  
  361.       if (strempty (lpszCmdLine))
  362.          StringLoad (IDS_DEFAULTPATH, szFilePath) ;
  363.       else
  364.          {
  365.          // check for single or double quote
  366.          QuoteChar = *lpszCmdLine ;
  367.          if (QuoteChar == '\'' || QuoteChar == '\"')
  368.             {
  369.             lpszCmdLine++ ;
  370.  
  371.             // remove the matching QuoteChar if found
  372.             pCmdLine = (LPSTR) lpszCmdLine ;
  373.             while (*pCmdLine != '\0')
  374.                {
  375.                if (*pCmdLine == QuoteChar)
  376.                   {
  377.                   *pCmdLine = '\0' ;
  378.                   break ;
  379.                   }
  380.                else
  381.                   {
  382.                   pCmdLine++ ;
  383.                   }
  384.                }
  385.             }
  386.  
  387.          // convert the LPSTR to LPTSTR
  388.  
  389.          mbstowcs (szFilePath, lpszCmdLine, strlen(lpszCmdLine) + 1) ;
  390.  
  391.          pFileNameStart = ExtractFileName (szFilePath) ;
  392.          NameOffset = pFileNameStart - szFilePath ;
  393.  
  394.          // convert short filename to long NTFS filename if necessary
  395.          hFindFile = FindFirstFile (szFilePath, &FindFileInfo) ;
  396.          if (hFindFile && hFindFile != INVALID_HANDLE_VALUE)
  397.             {
  398.             // append the file name back to the path name
  399.             lstrcpy (&szFilePath[NameOffset], FindFileInfo.cFileName) ;
  400.             FindClose (hFindFile) ;
  401.             }
  402.          }
  403.       
  404. //      OpenFileHandler (hWndMain, szFilePath) ;
  405.       FileOpen (hWndMain, (int)0, (LPTSTR)szFilePath) ;
  406.       PrepareMenu (GetMenu (hWndMain));
  407.       }
  408.  
  409.    return (bSuccess) ;
  410.    }  // PerfmonInitialize
  411.  
  412.  
  413.  
  414. void PerfmonClose (HWND hWndMain)
  415.    {
  416.    if (!QuerySaveChart (hWndMain, pGraphs))
  417.       return ;
  418.  
  419.    // close the log file for now.
  420.    // need to query the user later..!!
  421.    if (LogCollecting (hWndLog))
  422.       {
  423.       PLOG pLog = LogData (hWndLog) ;
  424.       
  425.       if (pLog)
  426.          {
  427.          CloseLog (hWndLog, pLog) ;
  428.          }
  429.       }
  430.       
  431.  
  432.    // free all the filenames
  433.    if (pChartFullFileName)
  434.       {
  435.       MemoryFree (pChartFullFileName) ;
  436.       pChartFullFileName = NULL ;
  437.       }
  438.    if (pAlertFullFileName)
  439.       {
  440.       MemoryFree (pAlertFullFileName) ;
  441.       pAlertFullFileName = NULL ;
  442.       }
  443.    if (pLogFullFileName)
  444.       {
  445.       MemoryFree (pLogFullFileName) ;
  446.       pLogFullFileName = NULL ;
  447.       }
  448.    if (pReportFullFileName)
  449.       {
  450.       MemoryFree (pReportFullFileName) ;
  451.       pReportFullFileName = NULL ;
  452.       }
  453.  
  454.    // free all the GDI resources
  455.    DeletePen (hWhitePen) ;
  456.    DeletePerfmonSystemObjects () ;
  457.  
  458.    SaveMainWindowPlacement (hWndMain) ;
  459.    DestroyWindow (hWndMain) ;
  460.    }  // PerfmonClose
  461.  
  462. 
  463.